//系统工具[不含业务]

var Tools = {
    /**
     * 获取选中的值
     * @param isArray 返回 array | string
     * @returns {any}
     */
    getCheckedBoxListVal: function (obj, isArray) {
        var ids = '';
        $(obj?obj:'.list-check-box').each(function(a, b){
            if($(b).is(":checked")){
                if(ids == ''){
                    ids += ''+$(b).val();
                }else{
                    ids += ','+$(b).val();
                }
            }
        });
        return true===isArray?ids.split(','):ids;
    },
    /**
     * 弹出带计算规则的验证码对话框
     * @param callBack
     */
    showValidatePrompt: function (callBack) {
        var start_num = Math.floor(Math.random() * 10);
        var end_num = Math.floor(Math.random() * 10);

        layer.prompt({
            title: start_num+'*'+end_num+'=？ 请输入计算结果。',
            formType: 0, //输入框类型，支持0（文本）默认1（密码）2（多行文本）
            value: '', //初始时的值，默认空字符
            maxlength: 10, //可输入文本的最大长度，默认500
        }, function (value, index, elem) {
            if(start_num*end_num != 1*value){
                return layer.alert('输入错误');
            }
            if(typeof callBack == 'function'){
                callBack();
            }
            layer.close(index);
        });
    },
    /**
     * 常规请求
     * @param url
     * @param data
     * @param callBack
     */
    request: function (url, data, callBack) {
        $.post(url, data, function (res) {
            if(typeof callBack == 'function'){
                return callBack(res);
            }
            if(res.code == 1){
                return  $.msg.error(res.msg);
            }
            $.msg.success(res.msg);
            return $.form.reload();
        }, 'json');
    },

    /**
     * 验证身份证
     * @param card
     * @returns {boolean}
     */
    isCardNo : function(card) {
        var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        return pattern.test(card);
    },
    /**
     * 验证手机
     * @param mobile
     * @returns {*|boolean}
     */
    isMobile:function(mobile){
        var mobreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/;
        return mobreg.test(mobile)
    },
    /**
     * 回车键按下确认
     */
    enterKeydown: function(ele){
        if (event.keyCode == 13){
            $(ele).submit();
        }
    },
    /**
     * 自写验证邮箱
     * @param p
     * @returns {*|boolean}
     */
    isEmail:function (p) {
        return /^([A-Z|a-z|0-9|\D]*)@([a-z|A-Z|0-9]*).[a-z|A-Z]*$/.test(p);
    },
    /**
     * 检查是否是字母或（和）数字
     * @param p
     * @param type 为 true 则包含特殊字符 否则不包含
     * @returns {*|boolean}
     */
    isTxtNum:function (p, type) {
        return type?/^[A-Z|a-z|0-9]|[.~@#%&_-]+$/.test(p):/^([A-Z|a-z|0-9])+$/.test(p);
    },
    isNum:function (p) {
        return /^\d+$/.test(p);
    },
    //提示
    tips:function (msg, ele) {
        layer.tips(msg, ele);
        $(ele).css({'border':'1px solid red'});
    },
    //失去焦点提示
    blur:function (o, ele) {
        $(o).bind('blur',function () {
            //元素警告样式
            if($(ele).val()!='')$(ele).css({'border':0});
            else {
                wh.tips('这里必须哦', ele);
                $(ele).css({'border':'1px solid red'});
            }
        });
    },
    /**
     * 将key=val;key1=val1 或 key=val&key1=val1格式的字符串转换为二维数组
     **/
    strToArray : function(uri, str){
        if(!str)str = ';';//拆分符号
        var spl_arr = uri.split(str);

        var res_arr = [];//存储结果
        for(var i=0; i<spl_arr.length; i++){
            var tmparr = spl_arr[i].split('=');
            res_arr[i] = tmparr;
        }
        return res_arr;
    },
    /**
     * 设置cookie
     **/
    setCookie : function(key, val){
        document.cookie = key+'='+encodeURIComponent(val);
        return true;
    },
    /**
     * 获取cookie[仅返回有效数据]
     **/
    getCookie : function(key){
        //假设存储格式是：key=val;key1=val1
        var cook_arr = document.cookie.split(';');

        //验证一下,没有值就返回false，不进入下一个流程
        if(!cook_arr)return false;

        var res_arr = [];//存储解析结果
        for(var i=0; i<cook_arr.length; i++){
            //这里要再解析一次
            var arr = cook_arr[i].split('=');
            //这里表示满足key=val格式
            if(arr && arr.length==2)res_arr.push ([arr[0].trim(),decodeURIComponent(arr[1].trim())]);//存储
        }
        if(key){
            for(var j=0; j<res_arr.length; j++){
                if(key == res_arr[j][0])return res_arr[j][1];//返回正确val
            }
        }else{
            return res_arr;//key不存在就返回所有，有时候还是想看看所有的值
        }
        //默认返回false 表示没有取到值
        return false;
    },

    /**
     * [公共]表单验证
     * @param form
     * @returns {boolean}
     */
    formValidate:function (form) {
        var r = true;
        $(form).find('*').each(function (k, o) {
            var ele_val = $(o).val();
            var attr = $(o).attr('data-validate');
            if(attr){
                $(o).addClass('tips_'+k);//临时class
                var ele = '.tips_'+k;
                if(attr == 'require'){
                    if(ele_val == ''){
                        wh.tips('这里必须哦', ele);//根据临时class处理后续css逻辑
                        wh.blur(o, ele);
                        r = false;//指定返回结果
                        return false;//退出循环
                    }
                }else if(attr == 'mobile'){
                    if(false === wh.isMobile(ele_val)){
                        wh.tips('这里是手机号哦', ele);
                        wh.blur(o, ele);
                        r = false;//指定返回结果
                        return false;
                    }

                }else if(attr == 'number'){
                    if(false === /^\d*$/.test(ele_val)){
                        wh.tips('这里是数字哦', ele);
                        wh.blur(o, ele);
                        r = false;//指定返回结果
                        return false;
                    }
                }else if(attr == 'birthday'){
                    //todo ...

                }else if(attr == 'date'){
                    //验证日期格式
                    //todo...

                }else if(attr == 'email'){
                    if(false === wh.isEmail(ele_val)){
                        wh.tips('这里是邮箱哦', ele);
                        wh.blur(o, ele);
                        r = false;//指定返回结果
                        return false;
                    }
                }else if(attr == 'txtnum'){
                    //字母+数字
                    if(false === wh.isTxtNum(ele_val)){
                        wh.tips('这里是字母和（或）数字哦', ele);
                        wh.blur(o, ele);
                        r = false;//指定返回结果
                        return false;
                    }
                }else if(attr == 'card'){
                    if(false === wh.isCardNo(ele_val)){
                        wh.tips('这里是身份证哦', ele);
                        wh.blur(o, ele);
                        r = false;//指定返回结果
                        return false;
                    }
                }
            }
        });
        return r;
    },
    /**
     * 转换下载地址,把完整文件下载地址分割为前缀和文件名
     * @param file_download_url eg：http://www.down.com/file/abc.mp4
     * @returns {[string, string]} ['http://www.down.com/file/', 'abc.mp4']
     */
    revertDownloadUrl: function (file_download_url) {
        var last_index = file_download_url.lastIndexOf('/');
        //前缀
        var frefix = file_download_url.substr(0, last_index+1);
        //资源文件名称
        var file_name = file_download_url.substr(last_index+1);
        return [frefix, file_name];
    },
};

var Submit = {
    is_debug: true,
    is_layer_load: true,//显示加载层
    //单表单
    saveData: function(obj, fn){
        var form = $(obj).parents('form');
        if(form.length !== 1){
            return Console.error('表单不存在');
        }

        var url = $(form).attr('action');
        if(!url){
            return Console.error('请求url不存在');
        }
        var data = $(form).serializeArray();
        if(this.is_debug){
            Console.info(data);
        }

        if(data.length === 0){
            return Console.error('提交空数据');
        }
        var that = this;


        //遮罩
        if(that.is_layer_load){
            var load_index = layer.load(1);
        }
        $.post(url, data, function (res) {
            if(that.is_debug){
                Console.info(res);
            }
            //取消遮罩
            if(that.is_layer_load){
                layer.close(load_index);
            }
            //处理
            if(fn) fn(res);
        }, 'json');


    },
    //多表单
    //todoing
};

//控制台
var Console = {
    error: function(msg){
        return console.error(msg);
    },
    info: function (msg) {
        return console.log(msg);
    }
};